package com.shujia.base.day03

/**
 * Map集合的元素是键值对的形式存在的，键是唯一，值可以发生重复
 *
 * List中的高阶函数，在Map中同样可以使用
 */
object Demo19Map {
  def main(args: Array[String]): Unit = {
    //创建一个Map集合
    //第一种写法创建Map集合 元素是一个一个的元组(key,value)
    val map1: Map[Int, String] = Map((1001, "张成阳"), (1002, "方直"), (1003, "杨浩东"), (1001, "阳阳"))
    println(s"map1:${map1}")
    //第二种写法创建Map集合 元素是一个一个的元组 key->value
    //    val map2: Map[Int, String] = Map(1001 -> "张成阳", 1002 -> "方直", 1003 -> "杨浩东", 1001 -> "阳阳")
    //    println(s"map2:${map2}")
    println("=" * 50)

    //获取所有的键
    val keySet: Iterable[Int] = map1.keys
    for (key <- keySet) {
      println(key)
    }
    println("=" * 50)
    //获取值元素
    //方式1：直接传入键的值，获取对应value值
    //    println(map1(1001))
    //    println(map1(1007)) // 若传入的键不存在，报错，程序终止，后续代码不执行
    //方式2：调用get函数，通过键获取值
    //    println(map1.get(1001)) // Some(阳阳).get
    //    println(map1.get(1007)) // None
    //方式3：getOrElse获取键对应的值，若值不存在，返回自定义默认值
    println(map1.getOrElse(1007, "默认值"))

    println("=" * 50)
    //遍历Map集合集合的方式1
    val keySet2: Iterable[Int] = map1.keys
    for (key <- keySet2) {
      val value: String = map1.getOrElse(key, "默认值")
      println(s"键：${key}, 值：${value}")
    }
    println("=" * 50)
    //遍历Map集合集合的方式2
    for (kv <- map1) {
      //得到每一个键值对
      println(s"键：${kv._1}, 值：${kv._2}")
    }




  }
}
